#pragma once

#include "tester_base.hpp"
#include "matrix.hpp"

#include <random>

class GEMMTester : public BaseTester {
 public:
  GEMMTester(size_t n, size_t k, size_t m);
  void DataGenerate() override;
  void Baseline() override {
    _baseline_result = Baseline(_input_matrix1, _input_matrix2);
  };
  void Implementation() override {
    _impl_result = Implementation(_input_matrix1, _input_matrix2);
  };
  bool CheckResult() override;

  Matrix<int> Baseline(const Matrix<int> &matrix1,
      const Matrix<int> &matrix2);
  Matrix<int> Implementation(const Matrix<int> &matrix1,
      const Matrix<int> &matrix2);

 private:
  Matrix<int> _input_matrix1;
  Matrix<int> _input_matrix2;
  Matrix<int> _baseline_result;
  Matrix<int> _impl_result;
};
